"""
Python基础学习 - 控制结构示例代码
=============================

本文件展示了Python中的常用控制结构：
1. 条件语句 (if/elif/else) - 根据不同条件执行不同代码块
2. 循环语句 (for/while) - 重复执行代码块
3. 异常处理 (try/except/finally) - 处理程序运行时可能出现的错误

控制结构是编程中的核心概念，它们决定了程序的执行流程。
"""

# 1. 条件语句示例
# 条件语句用于根据不同条件执行不同的代码块
# Python使用if、elif(else if的缩写)、else关键字来实现条件判断
def if_else_demo():
    print("=== 条件语句示例 ===")
    score = 85  # 定义一个分数变量，用于演示条件判断
    
    # 多分支条件判断 - 根据分数确定等级
    # 程序会从上到下依次检查每个条件，执行第一个为True的分支
    # 一旦找到匹配的条件，就会执行对应代码块并跳出整个if语句
    if score >= 90:
        grade = 'A'  # 优秀
    elif score >= 80:
        grade = 'B'  # 良好
    elif score >= 70:
        grade = 'C'  # 中等
    elif score >= 60:
        grade = 'D'  # 及格
    else:
        grade = 'F'  # 不及格
    
    print(f"分数: {score}, 等级: {grade}")
    
    # 三元运算符 - 一种简洁的条件赋值方式
    # 语法：值1 if 条件 else 值2
    # 如果条件为True，变量被赋值为值1；否则被赋值为值2
    result = "及格" if score >= 60 else "不及格"
    print(f"三元运算符结果: {result}")

# 2. 循环语句示例
# 循环语句用于重复执行一段代码，直到满足某个条件为止
# Python提供两种主要的循环：for循环和while循环
def loop_demo():
    print("\n=== 循环语句示例 ===")
    
    # for循环 - 通常用于已知循环次数的情况
    # range(1, 11)生成从1到10的数字序列（注意11不包含在内）
    print("使用for循环计算1到10的和:")
    total = 0  # 初始化总和为0
    for i in range(1, 11):  # i依次取值1,2,3,...,10
        total += i  # 累加每个数字到总和中
    print(f"1到10的和: {total}")
    
    # while循环 - 通常用于循环次数未知，需要根据条件判断的情况
    # 只要条件为True，循环就会继续执行
    print("\n使用while循环计算阶乘:")
    n = 5  # 计算5的阶乘
    factorial = 1  # 初始化阶乘结果为1
    counter = 1    # 初始化计数器为1
    while counter <= n:  # 当计数器小于等于n时继续循环
        factorial *= counter  # 将当前计数器值乘到阶乘结果中
        counter += 1          # 计数器加1，避免无限循环
    print(f"{n}的阶乘: {factorial}")
    
    # 嵌套循环 - 一个循环内部包含另一个循环
    # 外层循环每执行一次，内层循环会完整执行一轮
    print("\n九九乘法表:")
    for i in range(1, 10):      # 外层循环，控制行数
        for j in range(1, i+1): # 内层循环，控制每行的列数
            # end="\t"表示输出后不换行，而是用制表符分隔
            print(f"{j}×{i}={i*j}", end="\t")
        print()  # 每完成一行的内层循环后换行
    
    # 循环控制语句
    # break - 立即跳出整个循环
    # continue - 跳过当前循环的剩余部分，直接进入下一次循环
    print("\n使用break和continue:")
    for i in range(1, 11):
        if i == 3:
            continue  # 当i等于3时，跳过print语句，直接进入下一次循环
        if i == 8:
            break     # 当i等于8时，立即跳出整个循环，不再继续
        print(i, end=" ")  # 输出当前数字，后面跟一个空格
    print()  # 循环结束后换行

# 3. 异常处理示例
# 异常处理用于处理程序运行时可能出现的错误，避免程序崩溃
# Python使用try、except、else、finally关键字来处理异常
def exception_demo():
    print("\n=== 异常处理示例 ===")
    
    # 基本异常处理 - 捕获特定类型的异常
    # 当try块中的代码出现ZeroDivisionError（除零错误）时，
    # 程序会跳转到对应的except块执行，而不是崩溃
    try:
        result = 10 / 0  # 这行代码会产生除零错误
    except ZeroDivisionError as e:  # 捕获除零错误，并将错误信息保存在变量e中
        print(f"捕获到除零错误: {e}")
    
    # 多个异常处理 - 可以同时处理多种类型的异常
    # 程序会按顺序检查每个except块，执行第一个匹配的异常处理
    try:
        num = int(input("请输入一个数字: "))  # 尝试将用户输入转换为整数
        result = 100 / num                     # 进行除法运算
        print(f"100除以{num}的结果是: {result}")
    except ValueError:  # 捕获值错误（如输入非数字字符）
        print("输入的不是有效数字！")
    except ZeroDivisionError:  # 捕获除零错误
        print("不能除以零！")
    except Exception as e:  # 捕获所有其他类型的异常
        print(f"发生了未预期的错误: {e}")
    else:  # 只有当try块中没有发生任何异常时才会执行
        print("计算成功完成！")
    finally:  # 无论是否发生异常，finally块都会执行
        print("异常处理示例结束。")
    
    # 自定义异常 - 可以创建自己的异常类型
    # 通过继承Exception类来创建自定义异常
    class CustomError(Exception):
        pass  # pass表示这是一个空类，没有额外的代码
    
    # 使用raise关键字抛出自定义异常
    try:
        raise CustomError("这是一个自定义异常")  # 主动抛出异常
    except CustomError as e:  # 捕获自定义异常
        print(f"捕获到自定义异常: {e}")

# 主函数 - 程序的入口点
# 当直接运行这个Python文件时，会执行main()函数
def main():
    # 按顺序执行各个演示函数
    if_else_demo()
    loop_demo()
    exception_demo()

# 这是一个Python的特殊机制
# 当直接运行这个文件时（而不是导入它），
# __name__变量的值会是"__main__"，从而执行main()函数
if __name__ == "__main__":
    main()